package com.demo.java.OD251_300.OD272;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最多几个直角三角形】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146073933
 */
public class OdMain {
    private static final Scanner s = new Scanner(System.in);

    public static void main(String[] args) {
        // 读取测试用例的数量
        int t = s.nextInt();

        // 遍历每个测试用例
        while (t-- > 0) {
            // 读取当前测试用例的数组大小
            int n = s.nextInt();
            // 存储输入的数组
            int[] a = new int[n];

            // 读取数组的元素
            for (int i = 0; i < n; i++) {
                a[i] = s.nextInt();
            }

            // 对数组进行排序，保证 a[i] < a[j] < a[k] 的顺序
            Arrays.sort(a);

            // 输出最多可以组成的直角三角形数量
            System.out.println(findMaxTriangles(a));
        }
        // 关闭Scanner
        s.close();
    }

    // 计算最多可以组成多少个直角三角形
    public static int findMaxTriangles(int[] a) {
        int res = 0;

        // 遍历数组中的每一组三个数 (a[j], a[k], a[l])
        for (int i = 0; i < a.length - 2; i++) {
            int x = a[i];
            // 如果当前值为0，跳过
            if (x == 0) continue;

            for (int j = i + 1; j < a.length - 1; j++) {
                int y = a[j];
                // 如果当前值为0，跳过
                if (y == 0) continue;

                for (int k = j + 1; k < a.length; k++) {
                    int z = a[k];
                    // 如果当前值为0，跳过
                    if (z == 0) continue;

                    // 检查是否符合勾股定理：a[i]^2 + a[j]^2 == a[k]^2
                    if (x * x + y * y == z * z) {
                        // 找到一个符合条件的三元组，将这三条边置为0，表示已使用
                        a[i] = a[j] = a[k] = 0;
                        res++; // 增加结果数量
                    }
                }
            }
        }
        return res;
    }
}